import AbilityUtil from '@/AbilityUtil';
import BaseUtil from '@/BaseUtil';
import UnitSpellEvent from '@/event/UnitSpellEvent';
import UnitCommon from '../Common/UnitCommon';
import AttributeUtil from '@/AttributeUtil';

export default class CoolDownSystem {
    constructor() {
        se.onUnitSpellEffect(this.action);
    }
    action(this: void, e: UnitSpellEvent) {
        let 触发单位 = e.trigUnit;
        // 非玩家单位不触发
        if (GetOwningPlayer(触发单位) == Player(PLAYER_NEUTRAL_AGGRESSIVE)) {
            return;
        }
        let 技能id = e.spellAbilityId;
        BaseUtil.runLater(0.01, () => {
            let 原冷却 = AbilityUtil.getUnitAbilityStateCooldown(触发单位, 技能id);

            // 计算技能强化系统的冷却减少
            let cdp = (AttributeUtil.getUnitAttribute(触发单位)?.[id2string(技能id) + '_cdp'] as number) ?? 0;
            原冷却 *= 1 - cdp;

            if (原冷却 <= 0.01) {
                return;
            }
            let 技能冷却 = UnitCommon.取冷却降低(触发单位);
            原冷却 *= 技能冷却;
            AbilityUtil.setUnitAbilityStateCooldown(触发单位, 技能id, 原冷却);
        });
    }
    立刻冷却(u: unit) {
        UnitResetCooldown(u);
        SetUnitLifePercentBJ(u, 100);
        SetUnitManaPercentBJ(u, 100);
    }
    立刻冷却技能(u: unit, 技能id: number) {
        AbilityUtil.setUnitAbilityStateCooldown(u, 技能id, 0);
    }
}
